/*
 * @lc app=leetcode.cn id=746 lang=cpp
 *
 * [746] 使用最小花费爬楼梯
 */
#include <vector>
using std::vector;
// @lc code=start
class Solution
{
  public:
    int minCostClimbingStairs(vector<int> &cost)
    {
        vector<int> dp(cost.size(), 0);
        if (cost.size() == 2) {
            return std::min(cost[0], cost[1]);
        }

        dp[0] = cost[0];
        dp[1] = cost[1];
        std::cout << "dp[0]: " << dp[0] << ",dp[1]: " << dp[1] << "\n";

        for (int i = 2; i < cost.size(); ++i) {
            dp[i] = std::min(dp[i - 1], dp[i - 2]) + cost[i];
            std::cout << "i: " << i << " " << dp[i] << "\n";
        }

        /* 目标是跳到最后一个台阶再往上 */
        /* 要完全调出台阶，应该从最后一级台阶，或者倒数第二节台阶跳上去，因此返回二者之中的较小值 */
        return std::min(dp[cost.size() - 1], dp[cost.size() - 2]);
        ;
    }
};
// @lc code=end
